import { SET_PREFERENCES_HOTKEYS } from '../../constants/ActionTypes';
import cloneDeep from 'lodash.clonedeep';

const defaultState = [
  {
    commandName: 'incrementActiveViewport',
    label: 'Next Viewport',
    keys: ['right'],
  },
  {
    commandName: 'decrementActiveViewport',
    label: 'Previous Viewport',
    keys: ['left'],
  },
  // Supported Keys: https://craig.is/killing/mice
  // ~ Cornerstone Extension
  {
    commandName: 'rotateViewportCW',
    label: 'Rotate Right',
    keys: ['r'],
  },
  {
    commandName: 'rotateViewportCCW',
    label: 'Rotate Left',
    keys: ['l'],
  },
  {
    commandName: 'invertViewport',
    label: 'Invert',
    keys: ['i'],
  },
  {
    commandName: 'flipViewportVertical',
    label: 'Flip Horizontally',
    keys: ['h'],
  },
  {
    commandName: 'flipViewportHorizontal',
    label: 'Flip Vertically',
    keys: ['v'],
  },
  {
    commandName: 'scaleUpViewport',
    label: 'Zoom In',
    keys: ['+'],
  },
  {
    commandName: 'scaleDownViewport',
    label: 'Zoom Out',
    keys: ['-'],
  },
  {
    commandName: 'fitViewportToWindow',
    label: 'Zoom to Fit',
    keys: ['='],
  },
  {
    commandName: 'resetViewport',
    label: 'Reset',
    keys: ['space'],
  },
  // clearAnnotations
  {
    commandName: 'nextImage',
    label: 'Next Image',
    keys: ['down'],
  },
  {
    commandName: 'previousImage',
    label: 'Previous Image',
    keys: ['up'],
  },
  // firstImage
  // lastImage
  {
    commandName: 'previousViewportDisplaySet',
    label: 'Previous Series',
    keys: ['pageup'],
  },
  {
    commandName: 'nextViewportDisplaySet',
    label: 'Next Series',
    keys: ['pagedown'],
  },
  // ~ Cornerstone Tools
  {
    commandName: 'setZoomTool',
    label: 'Zoom',
    keys: ['z'],
  },
  // ~ Window level presets
  {
    commandName: 'windowLevelPreset1',
    label: 'W/L Preset 1',
    keys: ['1'],
  },
  {
    commandName: 'windowLevelPreset2',
    label: 'W/L Preset 2',
    keys: ['2'],
  },
  {
    commandName: 'windowLevelPreset3',
    label: 'W/L Preset 3',
    keys: ['3'],
  },
  {
    commandName: 'windowLevelPreset4',
    label: 'W/L Preset 4',
    keys: ['4'],
  },
  {
    commandName: 'windowLevelPreset5',
    label: 'W/L Preset 5',
    keys: ['5'],
  },
  {
    commandName: 'windowLevelPreset6',
    label: 'W/L Preset 6',
    keys: ['6'],
  },
  {
    commandName: 'windowLevelPreset7',
    label: 'W/L Preset 7',
    keys: ['7'],
  },
  {
    commandName: 'windowLevelPreset8',
    label: 'W/L Preset 8',
    keys: ['8'],
  },
  {
    commandName: 'windowLevelPreset9',
    label: 'W/L Preset 9',
    keys: ['9'],
  },
];

const hotkeys = (state = defaultState, action) => {
  switch (action.type) {
    case SET_PREFERENCES_HOTKEYS: {
      return cloneDeep(action.state);
    }
    default:
      return state;
  }
};

export { defaultState };

export default hotkeys;
